{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quickstart guide\n",
    "\n",
    "In this notebook we will through all the steps from downloading the data and training a model to evaluating the results. Check out the `environment.yml` file for the required Python packages."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import xarray as xr\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "## Downloading the data\n",
    "\n",
    "The data is hosted here. For this guide we will simply download the 500 hPa geopotential data (Z500)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--2020-06-07 10:49:05--  https://dataserv.ub.tum.de/s/m1524895/download?path=%2F5.625deg%2Fgeopotential_500&files=geopotential_500_5.625deg.zip\n",
      "Resolving dataserv.ub.tum.de (dataserv.ub.tum.de)... 138.246.224.34, 2001:4ca0:800::8af6:e022\n",
      "Connecting to dataserv.ub.tum.de (dataserv.ub.tum.de)|138.246.224.34|:443... connected.\n",
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 1532774663 (1,4G) [application/zip]\n",
      "Saving to: ‘geopotential_500_5.625deg.zip’\n",
      "\n",
      "geopotential_500_5. 100%[===================>]   1,43G  25,0MB/s    in 60s     \n",
      "\n",
      "2020-06-07 10:50:06 (24,4 MB/s) - ‘geopotential_500_5.625deg.zip’ saved [1532774663/1532774663]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# This might take a few minutes\n",
    "!wget \"https://dataserv.ub.tum.de/s/m1524895/download?path=%2F5.625deg%2Fgeopotential_500&files=geopotential_500_5.625deg.zip\" -O geopotential_500_5.625deg.zip"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Archive:  geopotential_500_5.625deg.zip\n",
      "  inflating: geopotential_500/geopotential_500hPa_1979_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1980_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1981_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1982_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1983_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1984_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1985_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1986_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1987_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1988_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1989_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1990_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1991_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1992_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1993_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1994_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1995_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1996_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1997_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1998_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_1999_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2000_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2001_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2002_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2003_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2004_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2005_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2006_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2007_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2008_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2009_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2010_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2011_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2012_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2013_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2014_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2015_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2016_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2017_5.625deg.nc  \n",
      "  inflating: geopotential_500/geopotential_500hPa_2018_5.625deg.nc  \n"
     ]
    }
   ],
   "source": [
    "!mkdir -p geopotential_500\n",
    "!unzip -d geopotential_500/ geopotential_500_5.625deg.zip"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "## Open the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "z500 = xr.open_mfdataset('geopotential_500/*.nc', combine='by_coords')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide data repr</title>\n",
       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "</symbol>\n",
       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide attributes</title>\n",
       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "</symbol>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --xr-background-color: var(--jp-layout-color0, white);\n",
       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
       "}\n",
       "\n",
       ".xr-wrap {\n",
       "  min-width: 300px;\n",
       "  max-width: 700px;\n",
       "}\n",
       "\n",
       ".xr-header {\n",
       "  padding-top: 6px;\n",
       "  padding-bottom: 6px;\n",
       "  margin-bottom: 4px;\n",
       "  border-bottom: solid 1px var(--xr-border-color);\n",
       "}\n",
       "\n",
       ".xr-header > div,\n",
       ".xr-header > ul {\n",
       "  display: inline;\n",
       "  margin-top: 0;\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-obj-type,\n",
       ".xr-array-name {\n",
       "  margin-left: 2px;\n",
       "  margin-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-obj-type {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-sections {\n",
       "  padding-left: 0 !important;\n",
       "  display: grid;\n",
       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
       "}\n",
       "\n",
       ".xr-section-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-section-item input {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-item input + label {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label {\n",
       "  cursor: pointer;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label:hover {\n",
       "  color: var(--xr-font-color0);\n",
       "}\n",
       "\n",
       ".xr-section-summary {\n",
       "  grid-column: 1;\n",
       "  color: var(--xr-font-color2);\n",
       "  font-weight: 500;\n",
       "}\n",
       "\n",
       ".xr-section-summary > span {\n",
       "  display: inline-block;\n",
       "  padding-left: 0.5em;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in + label:before {\n",
       "  display: inline-block;\n",
       "  content: '►';\n",
       "  font-size: 11px;\n",
       "  width: 15px;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label:before {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label:before {\n",
       "  content: '▼';\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label > span {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-summary,\n",
       ".xr-section-inline-details {\n",
       "  padding-top: 4px;\n",
       "  padding-bottom: 4px;\n",
       "}\n",
       "\n",
       ".xr-section-inline-details {\n",
       "  grid-column: 2 / -1;\n",
       "}\n",
       "\n",
       ".xr-section-details {\n",
       "  display: none;\n",
       "  grid-column: 1 / -1;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-array-wrap {\n",
       "  grid-column: 1 / -1;\n",
       "  display: grid;\n",
       "  grid-template-columns: 20px auto;\n",
       "}\n",
       "\n",
       ".xr-array-wrap > label {\n",
       "  grid-column: 1;\n",
       "  vertical-align: top;\n",
       "}\n",
       "\n",
       ".xr-preview {\n",
       "  color: var(--xr-font-color3);\n",
       "}\n",
       "\n",
       ".xr-array-preview,\n",
       ".xr-array-data {\n",
       "  padding: 0 5px !important;\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-array-data,\n",
       ".xr-array-in:checked ~ .xr-array-preview {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-array-in:checked ~ .xr-array-data,\n",
       ".xr-array-preview {\n",
       "  display: inline-block;\n",
       "}\n",
       "\n",
       ".xr-dim-list {\n",
       "  display: inline-block !important;\n",
       "  list-style: none;\n",
       "  padding: 0 !important;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list li {\n",
       "  display: inline-block;\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list:before {\n",
       "  content: '(';\n",
       "}\n",
       "\n",
       ".xr-dim-list:after {\n",
       "  content: ')';\n",
       "}\n",
       "\n",
       ".xr-dim-list li:not(:last-child):after {\n",
       "  content: ',';\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-has-index {\n",
       "  font-weight: bold;\n",
       "}\n",
       "\n",
       ".xr-var-list,\n",
       ".xr-var-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-var-item > div,\n",
       ".xr-var-item label,\n",
       ".xr-var-item > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-even);\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-var-item > .xr-var-name:hover span {\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-var-list > li:nth-child(odd) > div,\n",
       ".xr-var-list > li:nth-child(odd) > label,\n",
       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-odd);\n",
       "}\n",
       "\n",
       ".xr-var-name {\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-var-dims {\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-var-dtype {\n",
       "  grid-column: 3;\n",
       "  text-align: right;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-var-preview {\n",
       "  grid-column: 4;\n",
       "}\n",
       "\n",
       ".xr-var-name,\n",
       ".xr-var-dims,\n",
       ".xr-var-dtype,\n",
       ".xr-preview,\n",
       ".xr-attrs dt {\n",
       "  white-space: nowrap;\n",
       "  overflow: hidden;\n",
       "  text-overflow: ellipsis;\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-var-name:hover,\n",
       ".xr-var-dims:hover,\n",
       ".xr-var-dtype:hover,\n",
       ".xr-attrs dt:hover {\n",
       "  overflow: visible;\n",
       "  width: auto;\n",
       "  z-index: 1;\n",
       "}\n",
       "\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  display: none;\n",
       "  background-color: var(--xr-background-color) !important;\n",
       "  padding-bottom: 5px !important;\n",
       "}\n",
       "\n",
       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
       ".xr-var-data-in:checked ~ .xr-var-data {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".xr-var-data > table {\n",
       "  float: right;\n",
       "}\n",
       "\n",
       ".xr-var-name span,\n",
       ".xr-var-data,\n",
       ".xr-attrs {\n",
       "  padding-left: 25px !important;\n",
       "}\n",
       "\n",
       ".xr-attrs,\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  grid-column: 1 / -1;\n",
       "}\n",
       "\n",
       "dl.xr-attrs {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  display: grid;\n",
       "  grid-template-columns: 125px auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt, dd {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  float: left;\n",
       "  padding-right: 10px;\n",
       "  width: auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt {\n",
       "  font-weight: normal;\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-attrs dt:hover span {\n",
       "  display: inline-block;\n",
       "  background: var(--xr-background-color);\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-attrs dd {\n",
       "  grid-column: 2;\n",
       "  white-space: pre-wrap;\n",
       "  word-break: break-all;\n",
       "}\n",
       "\n",
       ".xr-icon-database,\n",
       ".xr-icon-file-text2 {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "</style><div class='xr-wrap'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-cc17e369-ed10-4965-8d0e-d946c695bed0' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-cc17e369-ed10-4965-8d0e-d946c695bed0' class='xr-section-summary'  title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>lat</span>: 32</li><li><span class='xr-has-index'>lon</span>: 64</li><li><span class='xr-has-index'>time</span>: 350640</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-664639de-4ecd-45aa-aff9-de7223eaea30' class='xr-section-summary-in' type='checkbox'  checked><label for='section-664639de-4ecd-45aa-aff9-de7223eaea30' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>level</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>500</div><input id='attrs-20ad9310-91e1-4245-b22f-9a3dfe38b215' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-20ad9310-91e1-4245-b22f-9a3dfe38b215' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c615f8f3-bc64-4085-953e-717cb3284620' class='xr-var-data-in' type='checkbox'><label for='data-c615f8f3-bc64-4085-953e-717cb3284620' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>millibars</dd><dt><span>long_name :</span></dt><dd>pressure_level</dd></dl></div><pre class='xr-var-data'>array(500, dtype=int32)</pre></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 5.625 11.25 ... 348.8 354.4</div><input id='attrs-9980d4b8-9012-449e-ae39-c7b7de39531e' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9980d4b8-9012-449e-ae39-c7b7de39531e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-09b6641e-67d7-4f91-a18f-6b79ceb18829' class='xr-var-data-in' type='checkbox'><label for='data-09b6641e-67d7-4f91-a18f-6b79ceb18829' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'>array([  0.   ,   5.625,  11.25 ,  16.875,  22.5  ,  28.125,  33.75 ,  39.375,\n",
       "        45.   ,  50.625,  56.25 ,  61.875,  67.5  ,  73.125,  78.75 ,  84.375,\n",
       "        90.   ,  95.625, 101.25 , 106.875, 112.5  , 118.125, 123.75 , 129.375,\n",
       "       135.   , 140.625, 146.25 , 151.875, 157.5  , 163.125, 168.75 , 174.375,\n",
       "       180.   , 185.625, 191.25 , 196.875, 202.5  , 208.125, 213.75 , 219.375,\n",
       "       225.   , 230.625, 236.25 , 241.875, 247.5  , 253.125, 258.75 , 264.375,\n",
       "       270.   , 275.625, 281.25 , 286.875, 292.5  , 298.125, 303.75 , 309.375,\n",
       "       315.   , 320.625, 326.25 , 331.875, 337.5  , 343.125, 348.75 , 354.375])</pre></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-87.19 -81.56 ... 81.56 87.19</div><input id='attrs-f1baf9ff-2cb0-4193-b9e1-f67bb144aa8b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f1baf9ff-2cb0-4193-b9e1-f67bb144aa8b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9637b811-8cb3-497e-b022-b44324c7452a' class='xr-var-data-in' type='checkbox'><label for='data-9637b811-8cb3-497e-b022-b44324c7452a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'>array([-87.1875, -81.5625, -75.9375, -70.3125, -64.6875, -59.0625, -53.4375,\n",
       "       -47.8125, -42.1875, -36.5625, -30.9375, -25.3125, -19.6875, -14.0625,\n",
       "        -8.4375,  -2.8125,   2.8125,   8.4375,  14.0625,  19.6875,  25.3125,\n",
       "        30.9375,  36.5625,  42.1875,  47.8125,  53.4375,  59.0625,  64.6875,\n",
       "        70.3125,  75.9375,  81.5625,  87.1875])</pre></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1979-01-01 ... 2018-12-31T23:00:00</div><input id='attrs-f1479d74-cfa2-4519-8e7c-7f69974c8826' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-f1479d74-cfa2-4519-8e7c-7f69974c8826' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-14ea875d-8145-4f66-bd80-5ff0ef63351b' class='xr-var-data-in' type='checkbox'><label for='data-14ea875d-8145-4f66-bd80-5ff0ef63351b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><pre class='xr-var-data'>array([&#x27;1979-01-01T00:00:00.000000000&#x27;, &#x27;1979-01-01T01:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T02:00:00.000000000&#x27;, ..., &#x27;2018-12-31T21:00:00.000000000&#x27;,\n",
       "       &#x27;2018-12-31T22:00:00.000000000&#x27;, &#x27;2018-12-31T23:00:00.000000000&#x27;],\n",
       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></li></ul></div></li><li class='xr-section-item'><input id='section-a564ee45-8296-48f1-8cb3-7af93fb445a2' class='xr-section-summary-in' type='checkbox'  checked><label for='section-a564ee45-8296-48f1-8cb3-7af93fb445a2' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>z</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(8760, 32, 64), meta=np.ndarray&gt;</div><input id='attrs-2225994a-5a2f-4e32-ba17-918ec384d706' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2225994a-5a2f-4e32-ba17-918ec384d706' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b071b04a-9d61-4fb4-addb-7d7a194f1fd9' class='xr-var-data-in' type='checkbox'><label for='data-b071b04a-9d61-4fb4-addb-7d7a194f1fd9' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>m**2 s**-2</dd><dt><span>long_name :</span></dt><dd>Geopotential</dd><dt><span>standard_name :</span></dt><dd>geopotential</dd></dl></div><pre class='xr-var-data'><table>\n",
       "<tr>\n",
       "<td>\n",
       "<table>\n",
       "  <thead>\n",
       "    <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr><th> Bytes </th><td> 2.87 GB </td> <td> 71.96 MB </td></tr>\n",
       "    <tr><th> Shape </th><td> (350640, 32, 64) </td> <td> (8784, 32, 64) </td></tr>\n",
       "    <tr><th> Count </th><td> 120 Tasks </td><td> 40 Chunks </td></tr>\n",
       "    <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</td>\n",
       "<td>\n",
       "<svg width=\"156\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"10\" y1=\"25\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"25\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"27\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"28\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"30\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"32\" />\n",
       "  <line x1=\"18\" y1=\"8\" x2=\"18\" y2=\"34\" />\n",
       "  <line x1=\"20\" y1=\"10\" x2=\"20\" y2=\"36\" />\n",
       "  <line x1=\"22\" y1=\"12\" x2=\"22\" y2=\"37\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"39\" />\n",
       "  <line x1=\"25\" y1=\"15\" x2=\"25\" y2=\"41\" />\n",
       "  <line x1=\"27\" y1=\"17\" x2=\"27\" y2=\"43\" />\n",
       "  <line x1=\"29\" y1=\"19\" x2=\"29\" y2=\"44\" />\n",
       "  <line x1=\"31\" y1=\"21\" x2=\"31\" y2=\"46\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"48\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"50\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"36\" y2=\"51\" />\n",
       "  <line x1=\"38\" y1=\"28\" x2=\"38\" y2=\"53\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"55\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"41\" y2=\"57\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"58\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"45\" y2=\"60\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"62\" />\n",
       "  <line x1=\"48\" y1=\"38\" x2=\"48\" y2=\"64\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"66\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"67\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"69\" />\n",
       "  <line x1=\"55\" y1=\"45\" x2=\"55\" y2=\"71\" />\n",
       "  <line x1=\"57\" y1=\"47\" x2=\"57\" y2=\"73\" />\n",
       "  <line x1=\"59\" y1=\"49\" x2=\"59\" y2=\"74\" />\n",
       "  <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"76\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"62\" y2=\"78\" />\n",
       "  <line x1=\"64\" y1=\"54\" x2=\"64\" y2=\"80\" />\n",
       "  <line x1=\"66\" y1=\"56\" x2=\"66\" y2=\"81\" />\n",
       "  <line x1=\"68\" y1=\"58\" x2=\"68\" y2=\"83\" />\n",
       "  <line x1=\"70\" y1=\"60\" x2=\"70\" y2=\"85\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"87\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"88\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"75\" y2=\"90\" />\n",
       "  <line x1=\"77\" y1=\"67\" x2=\"77\" y2=\"92\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"78\" y2=\"94\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 80.588235,70.588235 80.588235,96.000852 10.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"37\" y2=\"1\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"38\" y2=\"3\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"40\" y2=\"5\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"42\" y2=\"7\" />\n",
       "  <line x1=\"18\" y1=\"8\" x2=\"44\" y2=\"8\" />\n",
       "  <line x1=\"20\" y1=\"10\" x2=\"46\" y2=\"10\" />\n",
       "  <line x1=\"22\" y1=\"12\" x2=\"47\" y2=\"12\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"49\" y2=\"14\" />\n",
       "  <line x1=\"25\" y1=\"15\" x2=\"51\" y2=\"15\" />\n",
       "  <line x1=\"27\" y1=\"17\" x2=\"53\" y2=\"17\" />\n",
       "  <line x1=\"29\" y1=\"19\" x2=\"54\" y2=\"19\" />\n",
       "  <line x1=\"31\" y1=\"21\" x2=\"56\" y2=\"21\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"58\" y2=\"22\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"60\" y2=\"24\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"61\" y2=\"26\" />\n",
       "  <line x1=\"38\" y1=\"28\" x2=\"63\" y2=\"28\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"65\" y2=\"29\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"67\" y2=\"31\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"68\" y2=\"33\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"70\" y2=\"35\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"72\" y2=\"37\" />\n",
       "  <line x1=\"48\" y1=\"38\" x2=\"74\" y2=\"38\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"76\" y2=\"40\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"77\" y2=\"42\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"79\" y2=\"44\" />\n",
       "  <line x1=\"55\" y1=\"45\" x2=\"81\" y2=\"45\" />\n",
       "  <line x1=\"57\" y1=\"47\" x2=\"83\" y2=\"47\" />\n",
       "  <line x1=\"59\" y1=\"49\" x2=\"84\" y2=\"49\" />\n",
       "  <line x1=\"61\" y1=\"51\" x2=\"86\" y2=\"51\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"88\" y2=\"52\" />\n",
       "  <line x1=\"64\" y1=\"54\" x2=\"90\" y2=\"54\" />\n",
       "  <line x1=\"66\" y1=\"56\" x2=\"91\" y2=\"56\" />\n",
       "  <line x1=\"68\" y1=\"58\" x2=\"93\" y2=\"58\" />\n",
       "  <line x1=\"70\" y1=\"60\" x2=\"95\" y2=\"60\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"97\" y2=\"61\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"98\" y2=\"63\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"100\" y2=\"65\" />\n",
       "  <line x1=\"77\" y1=\"67\" x2=\"102\" y2=\"67\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"104\" y2=\"68\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"35\" y1=\"0\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 35.412617,0.000000 106.000852,70.588235 80.588235,70.588235\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"80\" y1=\"96\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"106\" y1=\"70\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"80.588235,70.588235 106.000852,70.588235 106.000852,96.000852 80.588235,96.000852\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"93.294544\" y=\"116.000852\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"126.000852\" y=\"83.294544\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,126.000852,83.294544)\">32</text>\n",
       "  <text x=\"35.294118\" y=\"80.706734\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,80.706734)\">350640</text>\n",
       "</svg>\n",
       "</td>\n",
       "</tr>\n",
       "</table></pre></li></ul></div></li><li class='xr-section-item'><input id='section-c6626405-b741-4ca6-9c99-bbdf32a47798' class='xr-section-summary-in' type='checkbox'  checked><label for='section-c6626405-b741-4ca6-9c99-bbdf32a47798' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.6</dd><dt><span>history :</span></dt><dd>2019-11-10 20:33:23 GMT by grib_to_netcdf-2.14.0: /opt/ecmwf/eccodes/bin/grib_to_netcdf -o /cache/data5/adaptor.mars.internal-1573408778.8616278-11514-5-32bb1559-bce6-4a86-9ae4-60f0d33d9246.nc /cache/tmp/32bb1559-bce6-4a86-9ae4-60f0d33d9246-adaptor.mars.internal-1573408778.8624167-11514-2-tmp.grib</dd></dl></div></li></ul></div></div>"
      ],
      "text/plain": [
       "<xarray.Dataset>\n",
       "Dimensions:  (lat: 32, lon: 64, time: 350640)\n",
       "Coordinates:\n",
       "    level    int32 500\n",
       "  * lon      (lon) float64 0.0 5.625 11.25 16.88 ... 337.5 343.1 348.8 354.4\n",
       "  * lat      (lat) float64 -87.19 -81.56 -75.94 -70.31 ... 75.94 81.56 87.19\n",
       "  * time     (time) datetime64[ns] 1979-01-01 ... 2018-12-31T23:00:00\n",
       "Data variables:\n",
       "    z        (time, lat, lon) float32 dask.array<chunksize=(8760, 32, 64), meta=np.ndarray>\n",
       "Attributes:\n",
       "    Conventions:  CF-1.6\n",
       "    history:      2019-11-10 20:33:23 GMT by grib_to_netcdf-2.14.0: /opt/ecmw..."
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z500"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot an example\n",
    "z500.z.isel(time=0).plot();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "## Create a simple climatological forecast\n",
    "\n",
    "Remember that we are using the years 2017 and 2018 for testing/evaluation, so we are not allowed to use these years to train any data-driven model.\n",
    "\n",
    "For more information on the climatology and persistence forecasts used in the paper check out `notebooks/1-climatology-persistence.ipynb`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# To speed things up we will just take the mean for 2016\n",
    "climatology = z500.sel(time=slice('2016', '2016')).mean('time').load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.QuadMesh at 0x7f320838e6a0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEWCAYAAABBvWFzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3dfbQkdX3n8ffnPswAM4A8OIgDEYjDGiCKOhISNEogiG502EQTslEnCWdnl2jMw3oMxJPEeMKuJq6uJtFkNhrRFYEgE9kYFUSNMYcHR+VRQEZAGQcZASUjOHMf+rt/VF3o/lXdruqe7q47fT+vc/rcrudf/apuf7uqvv37KSIwMzPbWxNNF8DMzMaDA4qZmQ2EA4qZmQ2EA4qZmQ2EA4qZmQ2EA4qZmQ2EA4oNhaT7JJ055G18SNKfDXMbZlafA4pZG0m/Lmle0g/bXi9pm36opC2SHpP0LUn/OVn+DEl3Snpc0uclPWPkO2HWEAcUs6LrImJ12+sLbdP+GpgBjgB+DXi/pBMBJB0OXAn8EXAosBW4bKQlN2uQA4oNnaQJSRdI+qakhyVdLunQfNqnJb0hmf9mSb+Yv3+WpGskPSLpLkm/3MQ+5GVZBfwS8EcR8cOI+BJwFfDafJZfBG6PiH+IiN3AW4HnSHpWIwU2GzEHFBuFNwLnAC8Gng58n+ybPsAlwK8uzCjpBOAZwCfzD/Br8nnW5PO9b+GKoBtJL5T0gy6vF3ZZ/LmSHpL0DUl/JGkqH388MB8R32ib92ZgoTwn5sMARMRjwDfbppuNtanqWcz22n8F3hAR2wEkvRX4tqTXAlvIbhs9IyK+RXYb6cqI2CPpHOC+iPj7fD1flfRx4FXA7d02mF89PKWPsn4ROAn4FlkguAyYA/4nsBp4NJn/UeDA/P1q4HtdppuNNV+h2Cg8A9iycHUA3AHMA0dExC7gk8C5+bznAh9tW+6n2q8syALO04ZV0Ii4JyLujYhWRNwKvI0sgAH8EDgoWeQgYFfN6WZjzQHFRuF+4GUR8ZS2134R8Z18+seAX5X008D+wOfblvuXZLnVEXF+1QYlvSjJ1EpfL6pZ9gCUv/8GMCVpXdv05/Dk1dLt+fBCGVYBP07F1ZTZuHBAsVH4G+CihRRaSU+VtKFt+j+TXY28DbgsIlr5+H8Cjpf0WknT+esFkn6iaoMR8a9Jplb6+tey5SS9TNIR+ftnkWVsfSJf52NkWVxvk7RK0mnABuAj+eJbgJMk/ZKk/YA/Bm6JiDt7qCuzfZYDio3Ce8iyoa6WtAu4HviphYkRsYfsg/pMsgfwC+N3AWeR3QbbAXwXeAewcohlPQO4RdJjZIHuSuB/tE3/LbKrqJ1kV1bnR8TteXm/R5YFdhFZ4sFP8eStPLOxJ3ewZWZmg+ArFDMzGwgHFDMzGwgHFDMzGwgHFDMzG4ix+KX81P6rYsVBhzZdDBs3zldZ+lQ9S+pHO7c/FBFP3ZvNvvT0VfHwI/O15v3KLXs+ExFn78329hVjEVBWHHQo637l9+sv0MdJaA1r4MNdo9rmcglcQ/i/iz7Wectf/v639na7Dz8yz42f+bFa804eeffhe7u9fcVYBBQzs1EKoEWrcr7lxgHFzKxHQTAb9W55LScOKGZmffAVSpEDiplZj4Jg3q2MFDigmJn1obVssinqc0AxM+tRAPMOKAVjEVBCMLd/06UYvIGkrVaso69tDOP/aAmklA6kLpLhQhFKtlHYbtU6q+YfhKTgpXWZzpP+TDqdXrF8re32eEz7SSuuy1coRY3+Ul7S70m6XdJtkj4maT9Jh0q6RtLd+d9DmiyjmVkqgNmIWq/lpLGAImkt8EZgfUScBEyS9R1xAXBtRKwDrs2HzcyWjCCYr/laTppuy2sK2F/SFHAAWSdKG4CL8+kXA+c0VDYzs3IB8zVfy0ljASXvT/ydwLeBB4BHI+Jq4IiIeCCf5wFgTdnykjZJ2ipp6/yPHhtVsc3M8l/K13stJ03e8jqE7GrkWODpwCpJr6m7fERsjoj1EbF+cv9VwyqmmVkJMV/ztZw0meV1JnBv3g83kq4EfgZ4UNKREfGApCPJ+u7uKiZhbvXeFWbQ2SDDyNAqXWdVRlDyFalWhtCgs4pK6rayviuye2plHfW6jTp6zZqrOB6l49Jjlg4nLX6UnReFZXr8qlyou5Kvnq1kXCSfJjHZfbiVDJdtZ5hZWnsjeyi/RAvXoCafoXwbOFXSAZIEnAHcAVwFbMzn2Qh8oqHymZmVyn6H4iuUVGNXKBFxg6QrgK8Cc8DXgM3AauBySeeRBZ1XN1VGM7PFtHyFUtDoDxsj4k+AP0lG7yG7WjEzW5IWrlCs01j8Ut7MbJQCMd/4ry6WHgcUM7M++JZXkQOKmVmPAjGTpq3ZeASUmIC5A9pyJ/tpYG4UXzaq0m37SNctppx27shEmmKaDpelk1alrVbsR60vblXHqCp9tCwVuapxwh4bMyzb0b39UqpWcQVVacETc8n0ZHhitridwjI9phEX6qqsvqvSgqe7Dxfqv2ydVce94mQc1kVE9sNG3/JKjUVAMTMbNT+UL3JAMTPrUYSYL7vEWuYcUMzM+tDyFUqBA4qZWY+yh/L++Ey5RszMeuSH8uUcUMzM+jDv36EUjEdAmYD51W15kBOdqYSDOO5pduIw1llsObiqU25KUnw7l2nNdw6nKaeaK+5IIeW0ItW41xTUbKFknqqU3zSNuCzltMc04Mp1lqa1RtfhwjLpQS6rizSVeK4i9Xumc/rknpJjONt9uDJ9PD3XaqRpF1J+q77A12iFulDfhRaNux/T9LNgUPxL+XLjEVDMzEas5SyvAgcUM7MeZY1DOqCkHFDMzHoUiFk3vVLggGJm1qMI/MPGEo3WiKSnSLpC0p2S7pD005IOlXSNpLvzv4c0WUYzsyLRqvlaTpoOse8BPh0RzwKeQ9YF8AXAtRGxDrg2HzYzWzKC7Aqlzms5aeyWl6SDgJ8Ffh0gImaAGUkbgJfks10MfAH4g64rm2ox+ZQ9bevuTBVUmopYkkkYFc2rli2z19JU5JKWaDvLUJZn2X2eQtrw7EQyXFxnKxmXphFPJNPTFNTKVpPL1GjdtnKdVenLE0m5CwVN5i9bR1WryNOdhVAyPDFVLGTV+dmaSzaSDM/vKX5oTSSpxWmqcdUxrHXMKlSmFacp15S0SDyVpAWvSOpvOlnHVHV9D4ofyhc1WSPHAd8D/l7S1yT9naRVwBER8QBA/ndNg2U0MysIRCvqvZaTJgPKFPA84P0R8VzgMXq4vSVpk6Stkra2/v2xYZXRzKwggNmYqvVaTpoMKNuB7RFxQz58BVmAeVDSkQD5351lC0fE5ohYHxHrJw5aNZICm5llxHzNV621SfdJulXSTZK2to3/bUl3Sbpd0p+3jb9Q0rZ82kvbxj8/X882Se+VshuqklZKuiwff4OkYwZWFW0aCygR8V3gfkn/IR91BvB14CpgYz5uI/CJBopnZraoIPulfJ1XD06PiJMjYj2ApNOBDcCzI+JE4J35+BOAc4ETgbOB90laeEL1fmATsC5/nZ2PPw/4fkQ8E3g38I692P1FNX099tvARyWtAO4BfoMsyF0u6Tzg28CrGyyfmVmpEfTYeD7w9ojYAxARC3drNgCX5uPvlbQNOEXSfcBBEXEdgKQPA+cAn8qXeWu+/BXAX0lSxGDTjRoNKBFxE7C+ZNIZoy6LmVldEerl6uPw9ttYwOaI2JyuErhaWYrq3+bTjwdeJOkiYDfwpoj4MrAWuL5t2e35uNn8fTqe/O/9WdljTtKjwGHAQ3V3oo6mr1AGYnqyxZpDdtWef75VPBHSOJ3mj8+30jTi7t9O0tTlOtJ1Vm0DKGSRFFJOk32dS1NOZ4rNR8zv6RzXStJSJ2aS1ONC68RJSmpJ5mZl6809phGXqmptuJDGmg6XHMO0dduKNOGplZ2Vs2JFUlnAiunOnN3Jic51pOfr7Nxk12GAueS4zs9OJtPTY5hUVkUr1kBli8SF+ktSgJkuSaFO629FZ91MTXUOr5hO6ncyrcviMby3MKZ32UP52k2vPLRwG6uL0yJih6Q1wDWS7iT7fD4EOBV4Admdm+Mob7M6uoynYtrAjEVAMTMbrcH2KR8RO/K/OyVtAU4hu8K4Mr8tdaOkFnB4Pv7otsWPAnbk448qGU/bMtslTQEHA48MbAdy/mWOmVmPsofyg/kdiqRVkg5ceA+cBdwG/CPwc/n444EVZLeorgLOzTO3jiV7+H5j/ru9XZJOzbO7XseTSU3tyU6vAj436Ocn4CsUM7O+DPCX8kcAW/IM3yngkoj4dJ6s9EFJtwEzwMY8CNwu6XKyrNg54PURsXCv73zgQ8D+ZA/jP5WP/wDwkfwB/iNkWWID54BiZtajhV/KD2RdEfeQtWWYjp8BXrPIMhcBF5WM3wqcVDJ+NyPImHVAMTPrQ8tPDArGIqCsnJzjuIMffmI4/eaQpvfNlTxMm5mf7DrPXElmWDcTJVle6biJJMmiML2PTLGZVud+pPu1Z77zkD8+s6Kwjsd3d46b2dO5TCvJIIq0wcmKjKFsoWSeqr7X63wZ7LEPeaUNByZZSROTxYJPpVlISdbRyiSLa//pzs7cV04Ws7zSeVYknchPJVlf6bm4e774b/zYbOcx3DPbOU96XqSZYml2YJ1v41OTaQZW53C6nwdMzxTWccBUUhfpOpOWSqfKUggr3FA9S6UImO3xM2E5GIuAYmY2StktLweUlAOKmVkfRvBL+X2OA4qZWY8W0oatkwOKmVnPfMurjAOKmVkfllt/8XU4oJiZ9SjL8qrdlteyMRYBZeXELOtWPdkPV3qg90RnR9Vl6X5pQ29zyTrSbyPFlN/O9MXpknTGwjxJOuhU0rH3fhOdKZR17E465d7T6jzEj82t7BjelQwD/HA2mWemc/jxJCU1TUFt1WhIM208Mx2eSlJ20/oua/SvahtpGvb0RPdGGdOUVSim9O6XpAHvN9l5zPaf7EyNXTlRTBtOx6XDk8l5k7YhlR7jsnE/ml/RdXqaJl/n+UBaF6um9nQMr57sPnxAMgywnzrrLz1m6f9p1fCwbksN8oeN42QsAoqZ2aj5lleRA4qZWY+c5VWu8TQFSZOSvibpn/LhQyVdI+nu/O8hTZfRzCw1hC6A93lLYW9/B7ijbfgC4NqIWAdcmw+bmS0ZEWIuJmq9lpNG91bSUcB/BP6ubfQG4OL8/cVkfSKbmS0pg+oPZZw0/QzlfwNvBg5sG3dE3lEMEfFA3iVmgaRNwCaAg4/cf9jlNDN7gp+hlGssoEj6BWBnRHxF0kt6XT4iNgObAY77yVVx/H7ffWLafHKg07ThmShLs0xSiyv6iy6mCSfppCqm/Kbpn2kq7LTSdNHeWxuuSqNM04ofbxXThnfN79cx/KNWZ8ppmnZddZ84rSvoPWV6ZTI8OYDusNNy9bPOtFzpcU+P6QoVU5H3Vp2OntLzoNfua9NzF+CAic6031XJcFoX6XCd+k7by3osOV8fj87hmRGlDWfrdkBJNXmFchrwSkkvB/YDDpL0f4EHJR2ZX50cCezsuhYzsxHz71DKNfYMJSIujIijIuIYsu4oPxcRr6Gz7+ONPNknspnZktFCtV7LSdPPUMq8Hbhc0nnAtxlBt5VmZr2I6L3TveVgSQSUiPgC8IX8/cPAGU2Wx8ysim95FS2JgGJmti/xM5RyDihmZn0oa/R0uRuLgLJSc6xb8eATw1XfHMq67pxNUonT9MNUmkY5zXzX6VBMk6zqQjRN7WyV5FCk5Zyle7nTdValR0MxLXWSJN02bcU3SZVN6waK6bPFdNv5ZLhYn1XS8yCt73S/BvGNMy13P6mxVeVKt1Gm1xTotFXfdPmy9U0Xjntaht7rcyaS1oWTdTwlSU3enaZDjzDPaLk9cK9jLAKKmdkoRfgZShkHFDOznol5Z3kVOKCYmfXBz1CKHFDMzHrktrzKOaCYmfUqsuco1skBxcysD87yKhqLgLJCwdGTM08MT6oqHbf41SJNSp2vSLvsJyWyUI6Kbcwnk8sSZ2crU2M7h9PL9DRdFKpTRqvSRadJ01yLDy+n01Tk5JhNFNKfq9ObW0kNzUbn8HwyvZWkM6fnRZ1E5fQY9nNeVJ0HVdL6hrL67F6utNwTNdJv022U/V+1axXS5qtTkQvHpHC+ztHNsB6bhx/KlxqLgGJmNmq+5VXkgGJm1gdneRU5oJiZ9SjCAaWMA4qZWR+cNlzkgGJm1gc/Qylqsk/5o4EPA08jS6jZHBHvkXQocBlwDHAf8MsR8f1u65pCHDLxZD/okyVZRe3mozp/J81ISaVZM+n8acZRtt3esmDSxJyyrJiqcpJMr5OXMpnMle5rmt0zlWRgpfVfJ2OoV2X1m2aCTRWyuirqP2mAsjwbsCIzbwB93aeKGVjdj0c2T/djOAxpxmB6jAr7UaN+0wzCqn0f1X4HouUsr4Ima2QO+O8R8RPAqcDrJZ0AXABcGxHrgGvzYTOzJSVqvuqQdJ+kWyXdJGlrMu1NkkLS4W3jLpS0TdJdkl7aNv75+Xq2SXqvlEVcSSslXZaPv0HSMf3v+eKa7FP+gYj4av5+F3AHsBbYAFycz3YxcE4zJTQzW0T+UL7OqwenR8TJEbF+YUR+J+fnybpDXxh3AnAucCJwNvA+SQuX5+8HNgHr8tfZ+fjzgO9HxDOBdwPv6Gu/KyyJa7Y8Wj4XuAE4IiIegCzoAGsWWWaTpK2Stn7v4er+IczMBmqQlyiLezfw5mRNG4BLI2JPRNwLbANOkXQkcFBEXBcRQfZI4Zy2ZRa+qF8BnLFw9TJIjQcUSauBjwO/GxH/Xne5iNgcEesjYv1TD6v+FbWZ2SD1cIVy+MKX3/y1qWx1wNWSvrIwXdIrge9ExM3JvGuB+9uGt+fj1ubv0/Edy0TEHPAocNheVUCJRrO8JE2TBZOPRsSV+egHJR0ZEQ/kEXdncyU0MysKoNWq/QX/ofbbWIs4LSJ2SFoDXCPpTuAtwFkl85ZtOLqM77bMQDV2hZJfbn0AuCMi3tU26SpgY/5+I/CJUZfNzKyrAEL1XnVWF7Ej/7sT2AK8GDgWuFnSfcBRwFclPY3syuPotsWPAnbk448qGU/7MpKmgIOBR/rY866avEI5DXgtcKukm/Jxfwi8Hbhc0nlkD6JeXb0qVaYKt6szb8830QqpyCXbqOgXPU2rTNNWB5ECWdVwZrad7vVTVY5CWvYQMjfrpH73qrDfJcerqvHHslTYQatKlV0q0nIV0ohLzsXK+u3x3Ozlc6FXgzrUklYBExGxK39/FvC2iFjTNs99wPqIeEjSVcAlkt4FPJ3s4fuNETEvaZekU8meR78O+Mt8FQtf1K8DXgV8Ln/OMlCNBZSI+BKLf9ScMcqymJn1bHAfx0cAW/Jn5FPAJRHx6UU3G3G7pMuBr5P9/OL1EbGQmXQ+8CFgf+BT+Quyu0EfkbSN7Mrk3IGVvo1/KW9m1rOeU4IXFRH3AM+pmOeYZPgi4KKS+bYCJ5WM302tuz17xwHFzKwfbnqlwAHFzKxXAVE/y2vZcEAxM+uLA0rKAcXMrB++5VUwFgElCGZj8eZXBpFuW92qbzp/72mtVa0Rj0pV2Xvds7kux2bc9NrP+iDUOdf2Nsl6qaQmp/taTE1OWjwe5rm3NP5dl5SxCChmZiO18MNG6+CAYmbWhyVyQ2FJcUAxM+uHs7wKHFDMzPogX6EUOKCYmfVqMH2djB0HFDOzntVvSXg5GZuA0i11cvDt0u67lkpqsvVvFMcwTX/uJw1+FBotl/+VCsYmoJiZjdTSjLGNqvVrJUmFDu3LxpmZLQsD7mBrXNT9+evPl4x72SALkpJ0tqS7JG2TdMEwt2Vm1itFvddy0vWWl6Tzgd8CjpN0S9ukA4F/G1ahJE0Cf00WyLYDX5Z0VUR8fVjbNDPryTILFnVUXaFcAryCrPvIV7S9nh8RrxliuU4BtkXEPRExA1wKbBji9szMDJB0raSXJ+M211m2a0CJiEcj4r6I+NWI+BbwI7K4vFrSj/Vd4mprgfvbhrfn454gaZOkrZK2PvTw8ml80MyWhjG+5XUs8AeS/qRt3Po6C9Z9KP8KSXcD9wL/AtzHk30VD0PZk6yOQxMRmyNifUSsP/ywySEWxWz8TUodL6sQZE2v1Hnte34AnAEcIen/STq47oJ1H8r/GXAq8I2IODbf2NCeoZBdkRzdNnwUsGOI2zMz603UfO17FBFzEfFbwMeBLwFr6ixYN6DMRsTDwISkiYj4PHByf2Wt5cvAOknHSloBnEv2HMfMbEkY41tef7PwJiI+BPw6cHWdBev+sPEHklYDXwQ+KmknMNdbGeuLiDlJbwA+A0wCH4yI24e1PTOznu2bwaJSRPxtMvwV4DfrLFs3oGwAdgO/B/wacDDwth7K2LOI+Gfgn4e5DTOzvo1pQNkbtQJKRDzWNnjxkMpiZrZP2IdvZw1V1Q8bd1EehwVERBw0lFL1oek+rwfRSF0T/ZEPI6OnqXLv7Xb31boos7f70vT/0z5h38zgGqquASUiDhxVQczM9iW+Qilya8NmZv1wQClwQDEz65WfoZRyQDEz64cDSoEDiplZH+QOtgqcymFmZgMxFlcoAiZK25PsX6vH69lBpFmmqcf9pH4ulz7jB7Gf/dRv1XGuOoajOj7pdqr2tYk04UH/z47c8vhX68lYBBQzs5HyQ/lSDihmZv1wQClwQDEz64cDSoEDiplZj4SzvMo4y8vMrFc1+0Kp+5xF0n2SbpV0k6St+bi/kHSnpFskbZH0lLb5L5S0TdJdkl7aNv75+Xq2SXqvlGVjSFop6bJ8/A2SjhlkdSxwQDEz68fge2w8PSJOjoiF/tuvAU6KiGcD3wAuBJB0AlmngycCZwPvk7TQD/r7gU3Auvx1dj7+POD7EfFM4N3AO3rc21oaueUl6S+AVwAzwDeB34iIH+TTLiTb+XngjRHxmUFvf1LFODofndevaUrjHPNd1zmMdNBeU5cB5iuWKayzZPa9TedMt9FP3QzjbkJ61Ccr9rO8HjrPg6p1FJeurot+jnuViegsZ7Hc3c//YRhG2vZIDfkZSkS095J4PfCq/P0G4NKI2APcK2kbcIqk+4CDIuI6AEkfBs4BPpUv89Z8+SuAv5KkiMF+cDV1dPqJvGZmS0YPt7wOl7S17bWpZHUBXC3pK4tM/02ywACwFri/bdr2fNza/H06vmOZiJgDHgUO62vHu2jkCqXXyAtcN+Iimpl1V/+7/UNtt7EWc1pE7JC0BrhG0p0R8UUASW8h63L9o/m8ZZd20WV8t2UGailcP9aJvAWSNi1E/O893P12lJnZQEWW5VXnVWt1ETvyvzuBLWRfpJG0EfgF4Nfabk9tB45uW/woYEc+/qiS8R3LSJoi68b9kV53u8rQAoqkz0q6reS1oW2eupG3ODJic0Ssj4j1Tz3Md8XMbMQG9FBe0ipJBy68B84CbpN0NvAHwCsj4vG2Ra4Czs0zt44le/h+Y0Q8AOySdGqe3fU64BNty2zM378K+Nygn5/AEG95RcSZ3aa3Rd4zakReM7MlZYBNrxwBbMkzfKeASyLi0/kt/5Vkt8AAro+I/xYRt0u6HPg62Rfy10fEwm2a84EPAfuT3flZuPvzAeAj+TofIXtWPXBNZXktRN4Xl0TeSyS9C3g6eeRtoIhmZt0NKKBExD3Ac0rGP7PLMhcBF5WM3wqcVDJ+N/DqvStptaZ+Kf9X9B55FzVH8P3W7ieG03TENAVyMop31tJ5CqmvyfBskmbcT5prus755ASts875tNzRfXpx/mGkh3bfZpn5qlZ8B1DOiYqvlJNpS8E1PjGq1zn89jnK6re43e7D6fwTySr72Y+q4162zkJqd6EcvZ0HQ7un3/tvTJaFprK8eo68ZmZLhXBrw2XclpeZWR8cUIocUMzM+uGAUuCAYmbWDweUAgcUM7NeucfGUg4oZmb9cEApGIuAsicmuHv2gCeGJ9U9/bMs1bOYMppKU2GnkuHqBMU09bWQ0hud62gl6yxLwywu0znPTHSWczY692x3rChZZ5pC3X3fJobSNnCnQl3E4BNC0/OmH1V1MVnj3JsonL97X66y7XaT7scKzVUuk/4PzCbnXnpelZlW0ppzUhfTaWvPVf/rQzw33cFW0VgEFDOzUfMtryIHFDOzXvmHjaUcUMzM+uGAUuCAYmbWI/9SvpwDiplZH5Q2nGfjEVB+2FrJlx4//onhYlZXdaN/00kWS5oJNohMm1SaFVPMAkuzZoq5Z63oPk9huNU5vCemC+ucbaXl6i2jKq3v0qw6DT4bpyobrUohu60kK6nsGPSitEHENJNpIu3fvXt9lp2bhXl6TElKs63SYShmHc62Oj9O9rS6ZxjWOV7pvqflqNrPsnLDNyu3W8nPUEqNRUAxMxs13/IqckAxM+uHA0qBA4qZWR98hVI0tP5n6pD0Jkkh6fC2cRdK2ibpLkkvbbJ8ZmaLGlCf8uOksSsUSUcDPw98u23cCWR9HZ9I1gXwZyUdX6fXRjOzkQk3vVKmySuUdwNvpjOGbwAujYg9EXEvsA04pYnCmZktZuF3KHVey0kjVyiSXgl8JyJuVmf/72uB69uGt+fjytaxCdgEsHLNQXxyx0lPTKtKJSxLY51KUzWTeaYqvo5U9S3ejzRtda4kfbcwT5Lym6YJz6fT54tpsFGxK0qyaQv1PZGmwRYvMNN5Vkwm6aA1GvRMpfNU9UNfVb8zJXVTVZ9RkXpcth+qqL/03Eunl61zRVLnVed3YbhG/af7NpPUze75zo+XtD7TuoTe67NKWleZT/a0jkVV/aMsQ0MLKJI+CzytZNJbgD8EzipbrGRc6VGLiM3AZoDVxz/NR9bMRmq5XX3UMbSAEhFnlo2X9JPAscDC1clRwFclnUJ2RXJ02+xHATuGVUYzs74swwfudYz8GUpE3BoRayLimIg4hiyIPC8ivgtcBZwraaWkY4F1wI2jLqOZWRW16r2WkyX1O5SIuF3S5cDXgTng9c7wMrOlaLkFizoaDyj5VUr78EXARc2UxsyshsAP5Us0HlDMzPZFfihfNBYBZXb3NN+544jFZ0hyx2Ki5FWiMC0AAA4oSURBVExI88vSp0vp2ZOuM11+EGdbstLSS+xWsuFkHs0n60iLVScNM1koXSSmkpWmw9MlBZ9M0lKnkrTWyXS4Oo01Tb9NVaWgtpK6as2VpGmn45L6j/R41DgNlG4mPT+T/VJaF5MldZGmCU92T02emKiu39R8sq9zSVrw/Gw6nOzofMm5l84zl5y/6TLdq2q4HFAKxiKgmJmNkjvYKueAYmbWqwh3sFXCAcXMrB+OJwUOKGZmffAtryIHFDOzXgXgW14FDihmZv1wPCkYi4Ay9SM49NbFW5EppvSWzFSRBlxo6LcqbbikOFUZuoVL6DQFuCT7ttCQbyudnqScpuso+6co7HuSTjuVDE93zj+/IilSMlw2TyRnYrrOVpL2Old25lY1JJSmmBZSrDuHJ+eKB2x6rmKdhbTsijJBSX1XDE+mwyUtAaf1mcyTZucWUunTXS/LtE9T0pP6mpjpHF45QzK9uM6J2YrhpP7TY1b1/zBIvuVVNBYBxcxs1JzlVdRoF8BmZvukut3/1ow5ku6TdKukmyRtzccdKukaSXfnfw9pm7+0q3RJz8/Xs03Se5U36Z43uHtZPv4GScfsfSUUOaCYmfUo+2Fj1Hr14PSIODki1ufDFwDXRsQ64Np8OO0q/WzgfZIWboS+n6zjwXX56+x8/HnA9yPimWS95b6j333vxgHFzKwfrZqv/m0ALs7fXwyc0za+0FW6pCOBgyLiuogI4MPJMgvrugI4Y+HqZZAcUMzM+tDDFcrhkra2vTaVrC6AqyV9pW36ERHxAED+d00+fi1wf9uyC12lr83fp+M7lomIOeBR4LC9rYOUH8qbmfWqtx4bH2q7jbWY0yJih6Q1wDWS7uwy72JdpXfrQr129+p7o7GAIum3gTeQdaT1yYh4cz7+QrL7ffPAGyPiM1Xrmtzd4pA7H39y3X1cZhbTgpNWZAupx8n0JLW2r2u/QppwmvJb0qpskhac/tiqcA83TSMuuccb6ZXwZJomPJEMJ63KrkymryxWxvwKdR0upA0nqcpp6iyUpNcmu1GV0ltIIy45j4rHpPs6iysojiqkqE9239d0P9O6KV2mcL5Wl6tjcmlddA5XpvzOJi0el6QNT+5J5kmWmZhL6n82aTU5mV/zw8obHmxbXhGxI/+7U9IW4BTgQUlHRsQD+e2snfnsi3WVvj1/n45vX2a7pCngYOCRge1ArpFbXpJOJ7un9+yIOBF4Zz6+28MmM7OlI6Leq4KkVZIOXHgPnAXcRtYl+sZ8to3AJ/L3pV2l57fFdkk6NX8+8rpkmYV1vQr4XP6cZaCaukI5H3h7ROyBLCrn45942ATcK2kbWaS+rplimpmViIF2AXwEsCV/Rj4FXBIRn5b0ZeBySecB3wZeDZVdpZ8PfAjYH/hU/gL4APCR/DP1EbIv7gPXVEA5HniRpIuA3cCbIuLLZA+Orm+br/2hkpnZ0jGgL/gRcQ/wnJLxDwNnLLJMaVfpEbEVOKlk/G7ygDRMQwsokj4LPK1k0lvy7R4CnAq8gCwKH0cPD47yTIhNAPutPHgQRTYzq88/lC8YWkCJiDMXmybpfODK/B7ejZJawOEs/rCpbP2bgc0ABx241ofWzEZKrSE2FLaPauqW1z8CPwd8QdLxwArgIbIHR5dIehfwdPKHTVUr08wc0/c//OSI9FI0zcZIM7KgkLVV6Og7XSadf6Ji/jJpudITtGo/AKLHk7qfy/SJzryIyakkTyIZjiTrK6aKuR8xWTFPRYOUZfVbyE4rZH0ljRn2UxdpJtgAbnsUsrrSfZ+syLorzXiryuqqyGJMZy9rHDLNeEsyCNOMq8LwTNqSI0zMpFlbnfMoGSadPpdMny9uYyCCoTY8ua9qKqB8EPigpNuAGWBjfrXS7WGTmdmSIHpuVmVZaCSgRMQM8JpFppU+bDIzW1IcUAr8S3kzs344oBQ4oJiZ9crPUEo5oJiZ9cFZXkUOKGZmPavXrMpyMx4BpRWwe89g15mmAVelCddRSANudR9O558syQ/d2/TlOg3ctZKOvFtp6maSjvujzsmlJeg1tbsqrbtsmdTgu3/oXVkZJrufa2lacXoeFKZD4TwozFPVuGk/dZWmEc91ns+ar0gBLhs3m5x7c8lw2vjjqK4aAgeUEuMRUMzMRs13vAocUMzM+uDfoRQ5oJiZ9cMBpcABxcysVxHF5zfmgGJm1hdfoRQ4oJiZ9cMBpWA8AooEU227UpGGWSvltNe0yULf7SVtWqaXyFUpv3VSldN9TVOLq/aj7J8iTeFNWzQupGpWtPCatgALRDpPOpyUK/pJB93bf/iSulN6DCrqW+n09HiVrSPZhtJyJOsobKOkHJXp5P2kCRfO+Yq096rzps46ej2mw0oVD+ql3C8z4xFQzMxGKnrvOmIZcEAxM+tV4IfyJRxQzMz64WcoBQ4oZmb9cEAp6KNBqr0n6WRJ10u6SdJWSae0TbtQ0jZJd0l6aRPlMzPrLm8css5rGWnqCuXPgT+NiE9Jenk+/BJJJwDnAieS9Sn/WUnHuxtgM1tSgtE1RLkPaSqgBHBQ/v5gYEf+fgNwaUTsAe6VtA04Bbiu+9qisxXSVlXacO8tvhZSjavSLqdKqjYdlS4ziG8zvaZqlj1YTNdR0cJrVQpwYXppOZNlKlKXC9NL5tlrJenlmqhIC1baym+NFN9knKaTE6WQNpxuMzk+Zcv0kz5eNb2q9eyq+Ufx7X2YLUwvs6uPOpoKKL8LfEbSO8luu/1MPn4tcH3bfNvzcQWSNgGbAPabWD28kpqZFbjplTJDCyiSPgs8rWTSW4AzgN+LiI9L+mXgA8CZlHedUfo1ICI2A5sBDp5e468KZjY6AeHfoRQMLaBExJmLTZP0YeB38sF/AP4uf78dOLpt1qN48naYmdnS4V/KFzSS5UUWJF6cv/854O78/VXAuZJWSjoWWAfc2ED5zMy6c5ZXQVPPUP4L8B5JU8Bu8mchEXG7pMuBrwNzwOud4WVmS06Es7xKNBJQIuJLwPMXmXYRcNFoS2Rm1qNldvVRx3j+Ur7qm0NZq729ftsYZjpiL3o9qevsZ9U609TZieQ0StNgSzfRvRwaxP3pdD+GcczS9PEKKmvpukpVGvdSORd7NYxyj6wuojwdfpkbz4BiZjZMbr6+lAOKmVk/nDZc4IBiZtajYJHWGpY5BxQzs16FO9gq44BiZtYHP5QvUoxB6puk7wHfAg4HHmq4OGWWYrlcpnpcpvqWYrnKyvSMiHjq3qxU0qfzddfxUEScvTfb21eMRUBZIGlrRKxvuhyppVgul6kel6m+pViupVimcdZU0ytmZjZmHFDMzGwgxi2gbG66AItYiuVymepxmepbiuVaimUaW2P1DMXMzJozblcoZmbWEAcUMzMbiLEJKJLOlnSXpG2SLmiwHPdJulXSTZK25uMOlXSNpLvzv4cMuQwflLRT0m1t4xYtg6QL83q7S9JLR1yut0r6Tl5fN0l6+ajKJeloSZ+XdIek2yX9Tj6+0brqUq4m62o/STdKujkv05/m4xurqy5laqyelr2I2OdfwCTwTeA4YAVwM3BCQ2W5Dzg8GffnwAX5+wuAdwy5DD8LPA+4raoMwAl5fa0Ejs3rcXKE5Xor8KaSeYdeLuBI4Hn5+wOBb+TbbbSuupSryboSsDp/Pw3cAJzaZF11KVNj9bTcX+NyhXIKsC0i7omIGeBSYEPDZWq3Abg4f38xcM4wNxYRXwQeqVmGDcClEbEnIu4FtpHV56jKtZihlysiHoiIr+bvdwF3AGtpuK66lGsxo6iriIgf5oPT+StosK66lGkxIzvXl6txCShrgfvbhrfT/R9wmAK4WtJXJG3Kxx0REQ9A9mEBrGmgXIuVYSnU3Rsk3ZLfElu4ZTLSckk6Bngu2bfcJVNXSbmgwbqSNCnpJmAncE1ENF5Xi5QJlsA5tRyNS0Ap7RRw5KXInBYRzwNeBrxe0s82VI66mq679wM/DpwMPAD8r3z8yMolaTXwceB3I+Lfu806qjJBabkarauImI+Ik4GjgFMkndRl9ibL1Pg5tVyNS0DZDhzdNnwUsKOJgkTEjvzvTmAL2SX1g5KOBMj/7mygaIuVodG6i4gH8w+FFvB/ePIWxEjKJWma7EP7oxFxZT668boqK1fTdbUgIn4AfAE4myVQV2mZlko9LUfjElC+DKyTdKykFcC5wFWjLoSkVZIOXHgPnAXclpdlYz7bRuAToy5blzJcBZwraaWkY4F1wI2jKtTCh1HuP5HV10jKJUnAB4A7IuJdbZMaravFytVwXT1V0lPy9/sDZwJ30mBdLVamJutp2Ws6K2BQL+DlZNkw3wTe0lAZjiPLIrkZuH2hHMBhwLXA3fnfQ4dcjo+RXerPkn0rO69bGYC35PV2F/CyEZfrI8CtwC1k//BHjqpcwAvJbnncAtyUv17edF11KVeTdfVs4Gv5tm8D/rjq3G6wTI3V03J/uekVMzMbiHG55WVmZg1zQDEzs4FwQDEzs4FwQDEzs4FwQDEzs4FwQLF9nqQfVs9lZsPmgGJmZgPhgGJjQ5m/kHSbsj5pfiUf/xJJX5B0haQ7JX00/zW6mQ3QVNMFMBugXyRrEPA5wOHAlyV9MZ/2XOBEsrab/g04DfhSE4U0G1e+QrFx8kLgY5E1DPgg8C/AC/JpN0bE9sgaDLwJOKahMpqNLQcUGyfdbmPtaXs/j6/OzQbOAcXGyReBX8k7XXoqWZfDbk3WbET8Lc3GyRbgp8laew7gzRHxXUnParZYZsuDWxs2M7OB8C0vMzMbCAcUMzMbCAcUMzMbCAcUMzMbCAcUMzMbCAcUMzMbCAcUMzMbiP8PXXix1KVSnkAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "climatology.z.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "### Evaluate the climatology\n",
    "\n",
    "Please check the paper for details on the evaluation metric. Here we will use the functions from `src/score.py`. To make sure we are always using the same targets for testing, we also implemented a function to load the test data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from src.score import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "z500_test = load_test_data('geopotential_500/', 'z')[::12]  # Take data only every 12 hours to speed up computation on Binder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "rmse_climatology = compute_weighted_rmse(climatology.z, z500_test).load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide data repr</title>\n",
       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "</symbol>\n",
       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide attributes</title>\n",
       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "</symbol>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --xr-background-color: var(--jp-layout-color0, white);\n",
       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
       "}\n",
       "\n",
       ".xr-wrap {\n",
       "  min-width: 300px;\n",
       "  max-width: 700px;\n",
       "}\n",
       "\n",
       ".xr-header {\n",
       "  padding-top: 6px;\n",
       "  padding-bottom: 6px;\n",
       "  margin-bottom: 4px;\n",
       "  border-bottom: solid 1px var(--xr-border-color);\n",
       "}\n",
       "\n",
       ".xr-header > div,\n",
       ".xr-header > ul {\n",
       "  display: inline;\n",
       "  margin-top: 0;\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-obj-type,\n",
       ".xr-array-name {\n",
       "  margin-left: 2px;\n",
       "  margin-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-obj-type {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-sections {\n",
       "  padding-left: 0 !important;\n",
       "  display: grid;\n",
       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
       "}\n",
       "\n",
       ".xr-section-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-section-item input {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-item input + label {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label {\n",
       "  cursor: pointer;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label:hover {\n",
       "  color: var(--xr-font-color0);\n",
       "}\n",
       "\n",
       ".xr-section-summary {\n",
       "  grid-column: 1;\n",
       "  color: var(--xr-font-color2);\n",
       "  font-weight: 500;\n",
       "}\n",
       "\n",
       ".xr-section-summary > span {\n",
       "  display: inline-block;\n",
       "  padding-left: 0.5em;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in + label:before {\n",
       "  display: inline-block;\n",
       "  content: '►';\n",
       "  font-size: 11px;\n",
       "  width: 15px;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label:before {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label:before {\n",
       "  content: '▼';\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label > span {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-summary,\n",
       ".xr-section-inline-details {\n",
       "  padding-top: 4px;\n",
       "  padding-bottom: 4px;\n",
       "}\n",
       "\n",
       ".xr-section-inline-details {\n",
       "  grid-column: 2 / -1;\n",
       "}\n",
       "\n",
       ".xr-section-details {\n",
       "  display: none;\n",
       "  grid-column: 1 / -1;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-array-wrap {\n",
       "  grid-column: 1 / -1;\n",
       "  display: grid;\n",
       "  grid-template-columns: 20px auto;\n",
       "}\n",
       "\n",
       ".xr-array-wrap > label {\n",
       "  grid-column: 1;\n",
       "  vertical-align: top;\n",
       "}\n",
       "\n",
       ".xr-preview {\n",
       "  color: var(--xr-font-color3);\n",
       "}\n",
       "\n",
       ".xr-array-preview,\n",
       ".xr-array-data {\n",
       "  padding: 0 5px !important;\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-array-data,\n",
       ".xr-array-in:checked ~ .xr-array-preview {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-array-in:checked ~ .xr-array-data,\n",
       ".xr-array-preview {\n",
       "  display: inline-block;\n",
       "}\n",
       "\n",
       ".xr-dim-list {\n",
       "  display: inline-block !important;\n",
       "  list-style: none;\n",
       "  padding: 0 !important;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list li {\n",
       "  display: inline-block;\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list:before {\n",
       "  content: '(';\n",
       "}\n",
       "\n",
       ".xr-dim-list:after {\n",
       "  content: ')';\n",
       "}\n",
       "\n",
       ".xr-dim-list li:not(:last-child):after {\n",
       "  content: ',';\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-has-index {\n",
       "  font-weight: bold;\n",
       "}\n",
       "\n",
       ".xr-var-list,\n",
       ".xr-var-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-var-item > div,\n",
       ".xr-var-item label,\n",
       ".xr-var-item > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-even);\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-var-item > .xr-var-name:hover span {\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-var-list > li:nth-child(odd) > div,\n",
       ".xr-var-list > li:nth-child(odd) > label,\n",
       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-odd);\n",
       "}\n",
       "\n",
       ".xr-var-name {\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-var-dims {\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-var-dtype {\n",
       "  grid-column: 3;\n",
       "  text-align: right;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-var-preview {\n",
       "  grid-column: 4;\n",
       "}\n",
       "\n",
       ".xr-var-name,\n",
       ".xr-var-dims,\n",
       ".xr-var-dtype,\n",
       ".xr-preview,\n",
       ".xr-attrs dt {\n",
       "  white-space: nowrap;\n",
       "  overflow: hidden;\n",
       "  text-overflow: ellipsis;\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-var-name:hover,\n",
       ".xr-var-dims:hover,\n",
       ".xr-var-dtype:hover,\n",
       ".xr-attrs dt:hover {\n",
       "  overflow: visible;\n",
       "  width: auto;\n",
       "  z-index: 1;\n",
       "}\n",
       "\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  display: none;\n",
       "  background-color: var(--xr-background-color) !important;\n",
       "  padding-bottom: 5px !important;\n",
       "}\n",
       "\n",
       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
       ".xr-var-data-in:checked ~ .xr-var-data {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".xr-var-data > table {\n",
       "  float: right;\n",
       "}\n",
       "\n",
       ".xr-var-name span,\n",
       ".xr-var-data,\n",
       ".xr-attrs {\n",
       "  padding-left: 25px !important;\n",
       "}\n",
       "\n",
       ".xr-attrs,\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  grid-column: 1 / -1;\n",
       "}\n",
       "\n",
       "dl.xr-attrs {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  display: grid;\n",
       "  grid-template-columns: 125px auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt, dd {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  float: left;\n",
       "  padding-right: 10px;\n",
       "  width: auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt {\n",
       "  font-weight: normal;\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-attrs dt:hover span {\n",
       "  display: inline-block;\n",
       "  background: var(--xr-background-color);\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-attrs dd {\n",
       "  grid-column: 2;\n",
       "  white-space: pre-wrap;\n",
       "  word-break: break-all;\n",
       "}\n",
       "\n",
       ".xr-icon-database,\n",
       ".xr-icon-file-text2 {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "</style><div class='xr-wrap'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-5fa99312-1be5-49f8-b6c1-884151908e4c' class='xr-array-in' type='checkbox' ><label for='section-5fa99312-1be5-49f8-b6c1-884151908e4c' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>1.08e+03</span></div><pre class='xr-array-data'>array(1079.88382283)</pre></div></li><li class='xr-section-item'><input id='section-d947304f-fd68-4111-a3e4-d482975d4550' class='xr-section-summary-in' type='checkbox'  checked><label for='section-d947304f-fd68-4111-a3e4-d482975d4550' class='xr-section-summary' >Coordinates: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>level</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>500</div><input id='attrs-f5a5d7eb-15bf-483d-8c1e-ba6f94b2437a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-f5a5d7eb-15bf-483d-8c1e-ba6f94b2437a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1926dc13-146e-4f28-8942-8834205cfc16' class='xr-var-data-in' type='checkbox'><label for='data-1926dc13-146e-4f28-8942-8834205cfc16' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>millibars</dd><dt><span>long_name :</span></dt><dd>pressure_level</dd></dl></div><pre class='xr-var-data'>array(500, dtype=int32)</pre></li></ul></div></li><li class='xr-section-item'><input id='section-c2c9642e-15a7-4b95-84ae-c31fc11894c2' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-c2c9642e-15a7-4b95-84ae-c31fc11894c2' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
      ],
      "text/plain": [
       "<xarray.DataArray ()>\n",
       "array(1079.88382283)\n",
       "Coordinates:\n",
       "    level    int32 500"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rmse_climatology"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "So we get a climatological RMSE of 1080 m^2/s^2 which is very similar to the RMSE we get for the climatology for all training years."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "## Train a neural network\n",
    "\n",
    "Now let's train a simple convolutional neural network. We are using several functions defined in `src/train_nn.py`. You can use and modify these or write your own function for data loading etc. \n",
    "\n",
    "For more information on the the networks check out `notebooks/3-cnn-example.ipynb`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from src.train_nn import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This limits TF memory usage on the GPU\n",
    "# limit_mem()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "First, we need to create the data generators for training, validation and testing. The main reason why we are using data generators instead of just loading the data as Numpy arrays is that this would require loading the same data twice since the features and targets are the same fields, just offset in time. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "bs = 32\n",
    "lead_time = 5*24\n",
    "var_dict = {'z': None}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading data into RAM\n",
      "Loading data into RAM\n"
     ]
    }
   ],
   "source": [
    "# Use 2015 for training and 2016 for validation\n",
    "dg_train = DataGenerator(\n",
    "    z500.sel(time=slice('2015', '2015')), var_dict, lead_time, batch_size=bs, load=True)\n",
    "dg_valid = DataGenerator(\n",
    "    z500.sel(time=slice('2016', '2016')), var_dict, lead_time, batch_size=bs, mean=dg_train.mean, std=dg_train.std, shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading data into RAM\n"
     ]
    }
   ],
   "source": [
    "# Now also a generator for testing. Impartant: Shuffle must be False!\n",
    "dg_test = DataGenerator(z500.sel(time=slice('2017', '2018')).isel(time=slice(0, None, 12)), # Limiting the data for Binder\n",
    "                        var_dict, lead_time, batch_size=bs, mean=dg_train.mean, std=dg_train.std, shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = dg_train[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((32, 32, 64, 1), (32, 32, 64, 1))"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Batches have dimensions [batch_size, lat, lon, channels]\n",
    "X.shape, y.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "Now let's build a simple fully convolutional network. We are using periodic convolutions in the longitude direction. These are defined in `train_nn.py`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "cnn = keras.models.Sequential([\n",
    "    PeriodicConv2D(filters=32, kernel_size=5, conv_kwargs={'activation':'relu'}, input_shape=(32, 64, 1,)),\n",
    "    PeriodicConv2D(filters=1, kernel_size=5)\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "lambda (Lambda)              (None, 36, 68, 1)         0         \n",
      "_________________________________________________________________\n",
      "periodic_conv2d (PeriodicCon (None, 32, 64, 32)        832       \n",
      "_________________________________________________________________\n",
      "lambda_1 (Lambda)            (None, 36, 68, 32)        0         \n",
      "_________________________________________________________________\n",
      "periodic_conv2d_1 (PeriodicC (None, 32, 64, 1)         801       \n",
      "=================================================================\n",
      "Total params: 1,633\n",
      "Trainable params: 1,633\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "cnn.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "cnn.compile(keras.optimizers.Adam(1e-4), 'mse')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "270/270 [==============================] - 6s 21ms/step - loss: 1.7766 - val_loss: 1.0282\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x7fe91978ec50>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Train a little bit ;)\n",
    "cnn.fit(dg_train, epochs=1, validation_data=dg_valid)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": "false"
   },
   "source": [
    "### Create a prediction and compute score\n",
    "\n",
    "Now that we have a model (albeit a crappy one) we can create a prediction. For this we need to create a forecast for each forecast initialization time in the testing range (2017-2018) and unnormalize it. We then convert the forecasts to a Xarray dataset which allows us to easily compute the RMSE. All of this is taken care of in the `create_predictions()` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "preds = create_predictions(cnn, dg_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<xarray.Dataset>\n",
       "Dimensions:  (lat: 32, lon: 64, time: 17400)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2017-01-06 ... 2018-12-31T23:00:00\n",
       "  * lat      (lat) float64 -87.19 -81.56 -75.94 -70.31 ... 75.94 81.56 87.19\n",
       "  * lon      (lon) float64 0.0 5.625 11.25 16.88 ... 337.5 343.1 348.8 354.4\n",
       "Data variables:\n",
       "    z        (time, lat, lon) float32 51313.625 51417.55 ... 51128.15 51107.68"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<xarray.DataArray 'z_rmse' ()>\n",
       "array(923.90897686)\n",
       "Coordinates:\n",
       "    level    int32 500"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "compute_weighted_rmse(preds.z, z500_test).load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "time = '2017-03-02T00'\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15,5))\n",
    "z500_test.sel(time=time).plot(ax=ax1)\n",
    "preds.sel(time=time).z.plot(ax=ax2);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The End\n",
    "\n",
    "This is the end of the quickstart guide. Please refer to the Jupyter notebooks in the `notebooks` directory for more examples. If you have questions, feel free to ask them as a Github Issue."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
